<?php

namespace App\Trip\Plane\Rules;

trait RulePriceTrait
{
    /**
     * 根据结算价 和 费率 计算退改价格
     * @param $rule
     * @return array
     */
    public function getPrices($rule): array
    {
        $prices     = [];
        $rate       = $rule['rate'];
        $child_rate = $rule['child_rate'];
        $prices     = [
            'adult_price' => '',
            'child_price' => '',
        ];

        foreach ($this->check_prices as $key => $price) {
            switch ($key) {
                case 'adult_price':
                    $prices[$key] = $this->calc_price($rate, $price);
                    break;
                case 'child_price':
                    $prices[$key] = $this->calc_price($child_rate, $price);
                    break;
                default:
                    // 其他的不处理 婴儿
            }
        }
        return $prices;
    }

    private function calc_price($rate, $price): float|int|string
    {
        // 非数字的目前直接返回
        if ($rate == '免费' || !$rate) {
            return 0;
        }

        if ($rate == '免费1次') {
            return 0;
        }

        if ($rate < 0) {
            return '不允许';
        }

        if ($rate == '不允许') {
            return '不允许';
        }

        if ($rate == '不得签转') {
            return '不允许';
        }

        if ($rate == '依据产品规则执行') {
            return '待确认';
        }
        // 这里需要 合并成人或者儿童
        if ($rate == 'need_merge') {
            return 'need_merge';
        }

        return round($rate * $price, 2);
    }
}